##
##  OSSP uuid - Universally Unique Identifier
##  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
##  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
##
##  This file is part of OSSP uuid, a library for the generation
##  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
##
##  Permission to use, copy, modify, and distribute this software for
##  any purpose with or without fee is hereby granted, provided that
##  the above copyright notice and this permission notice appear in all
##  copies.
##
##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
##  SUCH DAMAGE.
##
##  Makefile.in: make(1) build procedure
##

@SET_MAKE@

VPATH       = @srcdir@
srcdir      = @srcdir@
top_srcdir  = @top_srcdir@
S           = $(srcdir)
C           = .

DESTDIR     =
prefix      = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
bindir      = @bindir@
libdir      = @libdir@
includedir  = @includedir@
mandir      = @mandir@

CC          = @CC@
CXX         = @CXX@
CPPFLAGS    = -I. -I$(S) @CPPFLAGS@ @DEFS@
CFLAGS      = @CFLAGS@
CXXFLAGS    = @CXXFLAGS@
LDFLAGS     = @LDFLAGS@
LIBS        = @LIBS@
RM          = rm -f
CP          = cp
RMDIR       = rmdir
SHTOOL      = $(S)/shtool
LIBTOOL     = $(C)/libtool
TRUE        = true
POD2MAN     = pod2man
PERL        = @PERL@
PHP         = @PHP@
PG_CONFIG   = @PG_CONFIG@

LIB_NAME    = libuuid.la
LIB_OBJS    = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_ui64.lo uuid_ui128.lo uuid_str.lo

DCE_NAME    = libuuid_dce.la
DCE_OBJS    = uuid_dce.lo $(LIB_OBJS)

CXX_NAME    = libuuid++.la
CXX_OBJS    = uuid++.lo $(LIB_OBJS)

PRG_NAME    = uuid
PRG_OBJS    = uuid_cli.o

MAN_NAME    = uuid.3 uuid++.3 uuid.1

PERL_NAME   = $(S)/perl/blib/lib/OSSP/uuid.pm
PERL_OBJS   = $(S)/perl/uuid.pm

PHP_NAME    = $(S)/php/modules/uuid.so
PHP_OBJS    = $(S)/php/uuid.c

PGSQL_NAME  = $(S)/pgsql/libuuid.so
PGSQL_OBJS  = $(S)/pgsql/uuid.c

TARGETS     = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@ @PGSQL_NAME@

WITH_DCE         = @WITH_DCE@
WITH_CXX         = @WITH_CXX@
WITH_PERL        = @WITH_PERL@
WITH_PERL_COMPAT = @WITH_PERL_COMPAT@
WITH_PHP         = @WITH_PHP@
WITH_PGSQL       = @WITH_PGSQL@

.SUFFIXES:
.SUFFIXES: .c .cc .o .lo

all: $(TARGETS)

.c.o:
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<

.cc.o:
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $<

.c.lo:
	@$(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) -c $<

.cc.lo:
	@$(LIBTOOL) --mode=compile $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $<

$(LIB_NAME): $(LIB_OBJS)
	@$(LIBTOOL) --mode=link $(CC) -o $(LIB_NAME) $(LIB_OBJS) -rpath $(libdir) \
	    -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h`

$(DCE_NAME): $(DCE_OBJS)
	@$(LIBTOOL) --mode=link $(CC) -o $(DCE_NAME) $(DCE_OBJS) -rpath $(libdir) \
	    -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h`

$(CXX_NAME): $(CXX_OBJS)
	@$(LIBTOOL) --mode=link $(CXX) -o $(CXX_NAME) $(CXX_OBJS) -rpath $(libdir) \
	    -version-info `$(SHTOOL) version -l c -d libtool $(S)/uuid_vers.h`

$(PRG_NAME): $(PRG_OBJS) $(LIB_NAME)
	@$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $(PRG_NAME) $(PRG_OBJS) $(LIB_NAME) $(LIBS)

$(PERL_NAME): $(PERL_OBJS) $(LIB_NAME)
	@cd $(S)/perl && $(PERL) Makefile.PL PREFIX=$(prefix) COMPAT=$(WITH_PERL_COMPAT) && $(MAKE) $(MFLAGS) all
	@touch $(PERL_NAME)

$(PHP_NAME): $(PHP_OBJS) $(LIB_NAME)
	@cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local PHP=$(PHP)
	@touch $(PHP_NAME)

$(PGSQL_NAME): $(PGSQL_OBJS) $(LIB_NAME)
	@cd $(S)/pgsql && $(MAKE) $(MFLAGS) PG_CONFIG=$(PG_CONFIG)
	@touch $(PGSQL_NAME)

uuid.lo: $(S)/uuid.c uuid.h $(S)/uuid_md5.h $(S)/uuid_sha1.h $(S)/uuid_prng.h $(S)/uuid_mac.h $(S)/uuid_ui64.h $(S)/uuid_ui128.h $(S)/uuid_str.h $(S)/uuid_bm.h $(S)/uuid_ac.h
uuid_mac.lo: $(S)/uuid_mac.c $(S)/uuid_mac.h
uuid_md5.lo: $(S)/uuid_md5.c $(S)/uuid_md5.h
uuid_sha1.lo: $(S)/uuid_sha1.c $(S)/uuid_sha1.h
uuid_prng.lo: $(S)/uuid_prng.c $(S)/uuid_prng.h
uuid_str.lo: $(S)/uuid_str.c $(S)/uuid_str.h
uuid_ui64.lo: $(S)/uuid_ui64.c $(S)/uuid_ui64.h
uuid_ui128.lo: $(S)/uuid_ui64.c $(S)/uuid_ui128.h
uuid_dce.lo: $(S)/uuid_dce.c uuid.h $(S)/uuid_dce.h
uuid_cli.o: $(S)/uuid_cli.c uuid.h
uuid++.lo: $(S)/uuid++.cc $(S)/uuid++.hh

man: uuid.3 uuid++.3 uuid-config.1 uuid.1
uuid.3: uuid.pod
	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
	$(POD2MAN) --quotes=none \
	           --section=3 --center="Universally Unique Identifier" \
	           --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid.pod | \
	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.3
uuid++.3: uuid++.pod
	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
	$(POD2MAN) --quotes=none \
	           --section=3 --center="Universally Unique Identifier" \
	           --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid++.pod | \
	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid++.3
uuid-config.1: uuid-config.pod
	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
	$(POD2MAN) --quotes=none \
	           --section=1 --center="Universally Unique Identifier" \
	           --release="$$D" --date="OSSP uuid $$V1" $(S)/uuid-config.pod | \
	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid-config.1
uuid.1: uuid_cli.pod
	V1=`$(SHTOOL) version -l c -d short $(S)/uuid_vers.h`; \
	V2=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h`; \
	D=`$(SHTOOL) version -l c -d long $(S)/uuid_vers.h | sed -e 's;.*(;;' -e 's;).*;;'`; \
	$(CP) $(S)/uuid_cli.pod /tmp/uuid.pod; \
	$(POD2MAN) --quotes=none \
	           --section=1 --center="Universally Unique Identifier" \
	           --release="$$D" --date="OSSP uuid $$V1" /tmp/uuid.pod | \
	sed -e "s;UUID_VERSION_STR;$$V2;" >uuid.1; \
	$(RM) /tmp/uuid.pod

check: all
	@echo "==== UUID version 1 (time and node based): 4 single iterations"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4 -1
	@echo "==== UUID version 1 (time and node based): 4 subsequent iterations"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -n 4
	@echo "==== UUID version 3 (name based, MD5): 2 times repeated"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 -n 2 ns:URL http://www.ossp.org/
	@echo "==== UUID version 5 (name based, SHA-1): 2 times repeated"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v5 -n 2 ns:URL http://www.ossp.org/
	@echo "==== UUID version 4 (random data based): 4 single iterations"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4 -1
	@echo "==== UUID version 4 (random data based): 4 subsequent iterations"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4 -n 4
	@echo "==== UUID version 1 generation and decoding"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1`; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v1 -m`
	@echo "==== UUID version 3 generation and decoding"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v3 ns:URL http://www.ossp.org/`
	@echo "==== UUID version 5 generation and decoding"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v5 ns:URL http://www.ossp.org/`
	@echo "==== UUID version 3 generation and decoding"; \
	$(LIBTOOL) --mode=execute ./$(PRG_NAME) -d `$(LIBTOOL) --mode=execute ./$(PRG_NAME) -v4`
	-@if [ ".$(WITH_PERL)" = .yes ]; then \
	    echo "==== Perl bindings to C API"; \
	    (cd $(S)/perl && $(MAKE) $(MFLAGS) test); \
	fi
	-@if [ ".$(WITH_PHP)" = .yes ]; then \
	    echo "==== PHP bindings to C API"; \
	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local test PHP=$(PHP)); \
	fi
	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
	    echo "==== PGSQL bindings to C API"; \
	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) test PG_CONFIG=$(PG_CONFIG)); \
	fi

.PHONY: install
install:
	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(prefix)
	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir)
	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(includedir)
	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(libdir)/pkgconfig
	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man3
	$(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1
	$(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/
	$(SHTOOL) install -c -m 644 $(S)/uuid-config.1 $(DESTDIR)$(mandir)/man1/
	$(SHTOOL) install -c -m 644 $(S)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/
	$(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/
	-@if [ ".$(WITH_DCE)" = .yes ]; then \
	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/"; \
	    $(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/; \
	fi
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/"; \
	    $(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/; \
	fi
	$(SHTOOL) install -c -m 644 $(S)/uuid.3 $(DESTDIR)$(mandir)/man3/
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \
	    $(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \
	fi
	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(LIB_NAME) $(DESTDIR)$(libdir)/
	-@if [ ".$(WITH_DCE)" = .yes ]; then \
	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(DCE_NAME) $(DESTDIR)$(libdir)/; \
	fi
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    $(LIBTOOL) --mode=install $(SHTOOL) install -c -m 644 $(CXX_NAME) $(DESTDIR)$(libdir)/; \
	fi
	@$(LIBTOOL) --mode=install $(SHTOOL) install -c -s -m 755 uuid $(DESTDIR)$(bindir)/
	$(SHTOOL) install -c -m 644 $(S)/uuid.1 $(DESTDIR)$(mandir)/man1/
	-@if [ ".$(WITH_PERL)" = .yes ]; then \
	    (cd $(S)/perl && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR)); \
	fi
	-@if [ ".$(WITH_PHP)" = .yes ]; then \
	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local install EXTDIR=$(prefix)/lib/php PHP=$(PHP) DESTDIR=$(DESTDIR)); \
	fi
	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) install DESTDIR=$(DESTDIR) PG_CONFIG=$(PG_CONFIG)); \
	fi

.PHONY: uninstall
uninstall:
	-$(RM) $(DESTDIR)$(mandir)/man1/uuid.1
	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(bindir)/uuid
	-@$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIB_NAME)
	-@if [ ".$(WITH_DCE)" = .yes ]; then \
	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(DCE_NAME); \
	fi
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(CXX_NAME); \
	fi
	-$(RM) $(DESTDIR)$(mandir)/man3/uuid.3
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    echo "$(RM) $(DESTDIR)$(mandir)/man3/uuid++.3"; \
	    $(RM) $(DESTDIR)$(mandir)/man3/uuid++.3; \
	fi
	-$(RM) $(DESTDIR)$(includedir)/uuid.h
	-@if [ ".$(WITH_DCE)" = .yes ]; then \
	    echo "$(RM) $(DESTDIR)$(includedir)/uuid_dce.h"; \
	    $(RM) $(DESTDIR)$(includedir)/uuid_dce.h; \
	fi
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    echo "$(RM) $(DESTDIR)$(includedir)/uuid++.hh"; \
	    $(RM) $(DESTDIR)$(includedir)/uuid++.hh; \
	fi
	-$(RM) $(DESTDIR)$(libdir)/pkgconfig/uuid.pc
	-$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1
	-$(RM) $(DESTDIR)$(bindir)/uuid-config
	-$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(mandir)/man3 >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(mandir) >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(libdir)/pkgconfig >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(libdir) >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(includedir) >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(bindir) >/dev/null 2>&1 || $(TRUE)
	-$(RMDIR) $(DESTDIR)$(prefix) >/dev/null 2>&1 || $(TRUE)

.PHONY: clean
clean:
	-$(RM) $(LIB_NAME) $(LIB_OBJS)
	-@if [ ".$(WITH_DCE)" = .yes ]; then \
	    echo "$(RM) $(DCE_NAME) $(DCE_OBJS)"; \
	    $(RM) $(DCE_NAME) $(DCE_OBJS); \
	fi
	-@if [ ".$(WITH_CXX)" = .yes ]; then \
	    echo "$(RM) $(CXX_NAME) $(CXX_OBJS)"; \
	    $(RM) $(CXX_NAME) $(CXX_OBJS); \
	fi
	-$(RM) $(PRG_NAME) $(PRG_OBJS)
	-$(RM) -r .libs >/dev/null 2>&1 || $(TRUE)
	-$(RM) *.o *.lo
	-@if [ ".$(WITH_PERL)" = .yes ]; then \
	    (cd $(S)/perl && $(MAKE) $(MFLAGS) clean || true); \
	fi
	-@if [ ".$(WITH_PHP)" = .yes ]; then \
	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local clean || true); \
	fi
	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) clean PG_CONFIG=$(PG_CONFIG) || true); \
	fi

distclean: clean
	-$(RM) config.log config.status config.cache
	-$(RM) Makefile config.h uuid-config uuid.h uuid.pc
	-$(RM) libtool
	-@if [ ".$(WITH_PERL)" = .yes ]; then \
	    (cd $(S)/perl && $(MAKE) $(MFLAGS) distclean || true; rm -f Makefile.old); \
	fi
	-@if [ ".$(WITH_PHP)" = .yes ]; then \
	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local distclean || true); \
	fi
	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) distclean PG_CONFIG=$(PG_CONFIG) || true); \
	fi

realclean: distclean
	-$(RM) uuid.3 uuid.1
	-$(RM) configure config.h.in
	-$(RM) shtool
	-$(RM) ltmain.sh libtool.m4 config.guess config.sub
	-@if [ ".$(WITH_PERL)" = .yes ]; then \
	    (cd $(S)/perl && $(MAKE) $(MFLAGS) realclean || true; rm -f Makefile.old); \
	fi
	-@if [ ".$(WITH_PHP)" = .yes ]; then \
	    (cd $(S)/php && $(MAKE) $(MFLAGS) -f Makefile.local realclean || true); \
	fi
	-@if [ ".$(WITH_PGSQL)" = .yes ]; then \
	    (cd $(S)/pgsql && $(MAKE) $(MFLAGS) realclean PG_CONFIG=$(PG_CONFIG) || true); \
	fi

